// newListener 事件
const EventEmitter = require('events');

class MyEmitter extends EventEmitter { };

const myEmitter = new MyEmitter();

// EventEmitter 实例在新的监听器被添加到其内部监听器数组之前，会触发自身的 'newListener' 事件。
// 在添加监听器之前触发 'newListener' 事件有一个副作用： 如果在回调中注册同名事件的监听器，则该监听器会被插入到正被添加的监听器前面


myEmitter.once('newListener', function (event, listener) { // 只处理一次，避免无限循环
  // console.log(`被监听捕获`)
  if (event === 'add') {
    // 在前面插入一个新的监听器。
    myEmitter.on('add', () => {
      console.log(`我要先被触发！！`);
    });
  }
})

myEmitter.on('add', function (a, b) {
  console.log(`${a} + ${b} = ${a + b}`);
})

myEmitter.on('sub', function (a, b) {
  console.log(`${a} - ${b} = ${a - b}`);
})

myEmitter.emit('add', 3, 5)
myEmitter.emit('sub', 30, 5)
